//编写程序entab, 将空格串替换为最少数量的制表符和空格, 但要保持单词之间的间隔不变.
//假设制表符终止位的位置与练习1-20的detab程序的情况相同.
//当使用同一个制表符或者一个空格都可以到达下一个制表符终止位时,选用哪种替换字符比较好?

//遇到空格时,先判断是不是在等于制表符的位数,如果是,制表符数量加一,如果不是,空格符数量加一
//没有遇到空格,直接把积累的制表符和空格打印出来,在继续打印输入的字符
#include <stdio.h>
#define TABNIC 8

int main()
{
    int c;
    int nb, nt, pos;

    pos = nb = nt = 0;
    for(pos = 0; (c = getchar()) != EOF; ++pos)
    {
        if (c == ' ')
        {
            if ((pos + 1) % TABNIC != 0)
            {
                ++nb;
            }
            else
            {
                nb = 0;
                ++nt;
            }
        }
        else
        {
            while (nt > 0)
            {
                putchar('\t');
                --nt;
            }
            if (c == '\t')
            {
                nb = 0;
            }
            else 
            {
                while (nb > 0)
                {
                    putchar(' ');
                    --nb;
                }
            }
            putchar(c);
            if (c == '\n')
            {
                pos = 0;
            }
            else if (c == '\t')
            {
                pos += TABNIC - pos % TABNIC;
            }
        }
    }

    return 0;
}